Técnicas No Supervisadas. Analisis Cluster

Necesitamos analizar los datos de tipo mixto, número, órdinal y nominal. Nos vamos a enfocar en clasificación no supervisada usando R CLUSTERING ALGORITHM: PARTITIONING AROUND MEDOIDS (PAM)

setwd("C:/Users/Pablo/Desktop/Machine_Learning_I/PRAC/Cluster")
df_mas <- read.csv ("kc_house_data.csv")
#set.seeds=737
df_mas  <- sample_n(df_mas, size = 10000)

Distancia de Gower

La distancia es una medida numérica de cuán separados están los individuos, es decir una métrica utilizada para medir la proximidad o similitud entre individuos;

La distancia de Gower se calcula como el promedio de las diferencias parciales entre individuos. Para cada tipo de variable, se usa una métrica de distancia particular que funciona bien para ese tipo y se escala para caer entre 0 y 1

Para las variables cuantitativa La Distancia de Manhattan Para las Variables Ordinales la Distancia un ajuste especial de la Manhattan despúes de haber sido ordenadas Para las Nominales primero se convierte en k columnas Binarias ( para cada categoria de cada variable norminal) y posteriormente se usa el coeficiente de Dice

El coeficiente de Dice [0,1] para medir la similitud entre 2 muestras

Se escala de la siguiente Manera Se define la distancia de Gower como d2ij = 1 − sij , donde sij = p1h=1 (1 − |xih − xjh|/Gh) + a + α p1 + (p2 − d) + p3 es el coeficiente de similaridad de Gower,

p1 es el numero de variables cuantitativas continuas, p2 es el numero de variables binarias, p3 es el numero de variables cualitativas(no binarias), a es el numero de coincidencias (1, 1) en las variables binarias, d es el numero de coincidencias (0, 0) en las variables binarias, α es el numero de coincidencias en las variables cualitativas (no binarias) y Gh es el rango (o recorrido) de la h-esima variable cuantitativa.

gower_dist <- daisy(df_mas, metric = "gower")
## Warning in daisy(df_mas, metric = "gower"): binary variable(s) 9 treated as
## interval scaled
gower_mat  <- as.matrix(gower_dist)

Ejemplo de Casas Más similares, basado en la distancia de Gower

df_mas[which(gower_mat == min(gower_mat[gower_mat != min(gower_mat)]), 
              arr.ind = TRUE)[1, ], ]
##             id      date  price bedrooms bathrooms sqft_living sqft_lot
## 9755 125059178 7/22/2014 510000        6       4.5        3300     7480
## 2743 125059138 7/22/2014 510000        6       4.5        3300     7561
##      floors waterfront view condition grade sqft_above sqft_basement
## 9755      2          0    0         3     8       3300             0
## 2743      2          0    0         3     8       3300             0
##      yr_built yr_renovated zipcode     lat     long sqft_living15
## 9755     1980            0   98052 47.6796 -122.104          2470
## 2743     1980            0   98052 47.6795 -122.104          2470
##      sqft_lot15
## 9755       7561
## 2743       7561

Ejemplo de Casas Más Disimilares, basado en la distancia de Gower

df_mas[which(gower_mat == max(gower_mat[gower_mat != max(gower_mat)]), 
              arr.ind = TRUE)[1, ], ]
##              id      date   price bedrooms bathrooms sqft_living sqft_lot
## 8942 1697000370 3/25/2015  234000        3       1.0        1040     8122
## 5859 9808700762 6/11/2014 7060000        5       4.5       10040    37325
##      floors waterfront view condition grade sqft_above sqft_basement
## 8942      1          0    0         5     7       1040             0
## 5859      2          1    2         3    11       7680          2360
##      yr_built yr_renovated zipcode     lat     long sqft_living15
## 8942     1971            0   98198 47.3731 -122.312          1470
## 5859     1940         2001   98004 47.6500 -122.214          3930
##      sqft_lot15
## 8942       8676
## 5859      25449

Selección del algoritmo PAM

Una vez calculada la matriz de distancia emplearemos el algoritmo PAM, basado en una partición de medoids (El término medoids se refiere a un objeto dentro de un grupo para el cual la diferencia promedio entre este y todos los demás miembros del grupo es mínima, es decir el punto más centralmente ubicado del conjunto de datos), en cambio en el método K-means cada Cluster está representado por su centroide. Es un método muy similar a k-means, pero es mucho más robusto a la presencia de Outliers como es en nuestro caso. Es un procedimiento de agrupación iterativa que implica los siguientes pasos:

Step1

Elejir k entidades aleatorias para convertirse en los Medoids

Step2

Asignamos a cada entidad, en nuestro caso a cada “casa” el medoide más cercano basado en la distancia de Gower anteriormente calculada.

Step3

Para cada Cluster identificar la observación que produciría la distancia promedio más baja si fuera reasiganada como el Medoid, si fuera así hay que hacer de esta observación el nuevo Medoid. Si al menos un Medoid ha cambiado volvemos Step2, en caso contrario Step4

Step4

FIN

K Means intenta mininizar el ECM total K Medoids minimiza la suma de las diferencias entre los puntos etiquetados para estar en un grupo y un punto designado como el centro de ese grupo Mediod.

Selección del Número óptimo de Clústers

Silhouette, Validación y consistencia dentro de los datos.

Es una medida de cuan similar es objeto dentro del grupo de pertenencia y cuan disimilar con los otros grupos.

Varía entre -1 y 1. Un valor alto indica que un objeto está bien emparejado dentro de su grupo y mal con el resto. Un valor muy bajo o negativo implica una revisión del número de cluster al alza o a la baja

sil_width <- c(NA)
for(i in 2:10){  
  pam_fit <- pam(gower_dist, diss = TRUE, k = i)  
  sil_width[i] <- pam_fit$silinfo$avg.width  
}
plot(1:10, sil_width,
     xlab = "Numero de clusters",
     ylab = "Silhouette")
lines(1:10, sil_width)

fviz_silhouette(pam_fit)
##    cluster size ave.sil.width
## 1        1 1031          0.02
## 2        2  860          0.15
## 3        3 1107          0.01
## 4        4  906          0.05
## 5        5 1063          0.14
## 6        6  922          0.10
## 7        7 1058          0.12
## 8        8 1279          0.10
## 9        9 1041          0.10
## 10      10  733          0.03

Después de calcular el Silhouette para el algoritmo PAM vemos que 2 grupos producen el valor más alto. Aún asi nosotros seleccionamos 3 Cluster para dividir la dispersión del Trabajo y facilitar el entendimiento de los siguientes análisis.

Seleccionamos 3 Clusters

set.seed=737
k <- 3
pam_fit <- pam(gower_dist, diss = TRUE, k)
pam_results <- df_mas %>%
  mutate(cluster = pam_fit$clustering) %>%
  group_by(cluster) %>%
  do(the_summary = summary(.))



#frecuencia del número de casas en cada Clúster
ftable(pam_fit$clustering)
##     1    2    3
##                
##  3660 3759 2581
#descriptivo en cada Clúster
pam_results$the_summary
## [[1]]
##        id                    date          price            bedrooms     
##  Min.   :1.000e+06   7/1/2014  :  40   Min.   : 180500   Min.   : 2.000  
##  1st Qu.:2.323e+09   7/8/2014  :  29   1st Qu.: 420000   1st Qu.: 3.000  
##  Median :4.140e+09   4/9/2015  :  26   Median : 596250   Median : 4.000  
##  Mean   :4.845e+09   10/28/2014:  25   Mean   : 710156   Mean   : 3.738  
##  3rd Qu.:7.702e+09   4/21/2015 :  25   3rd Qu.: 825000   3rd Qu.: 4.000  
##  Max.   :9.895e+09   4/27/2015 :  25   Max.   :7060000   Max.   :10.000  
##                      (Other)   :3490                                     
##    bathrooms      sqft_living       sqft_lot           floors     
##  Min.   :1.000   Min.   :  950   Min.   :    698   Min.   :1.000  
##  1st Qu.:2.500   1st Qu.: 2110   1st Qu.:   5000   1st Qu.:2.000  
##  Median :2.500   Median : 2630   Median :   7730   Median :2.000  
##  Mean   :2.722   Mean   : 2761   Mean   :  19209   Mean   :1.954  
##  3rd Qu.:3.000   3rd Qu.: 3225   3rd Qu.:  12789   3rd Qu.:2.000  
##  Max.   :7.500   Max.   :10040   Max.   :1024068   Max.   :3.500  
##                                                                   
##    waterfront          view          condition         grade       
##  Min.   :0.0000   Min.   :0.0000   Min.   :2.000   Min.   : 6.000  
##  1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:3.000   1st Qu.: 8.000  
##  Median :0.0000   Median :0.0000   Median :3.000   Median : 8.000  
##  Mean   :0.0123   Mean   :0.3235   Mean   :3.163   Mean   : 8.603  
##  3rd Qu.:0.0000   3rd Qu.:0.0000   3rd Qu.:3.000   3rd Qu.: 9.000  
##  Max.   :1.0000   Max.   :4.0000   Max.   :5.000   Max.   :13.000  
##                                                                    
##    sqft_above   sqft_basement       yr_built     yr_renovated    
##  Min.   : 720   Min.   :   0.0   Min.   :1900   Min.   :   0.00  
##  1st Qu.:1989   1st Qu.:   0.0   1st Qu.:1987   1st Qu.:   0.00  
##  Median :2440   Median :   0.0   Median :1999   Median :   0.00  
##  Mean   :2539   Mean   : 222.0   Mean   :1994   Mean   :  58.45  
##  3rd Qu.:2990   3rd Qu.: 146.2   3rd Qu.:2006   3rd Qu.:   0.00  
##  Max.   :7880   Max.   :3500.0   Max.   :2015   Max.   :2014.00  
##                                                                  
##     zipcode           lat             long        sqft_living15 
##  Min.   :98001   Min.   :47.16   Min.   :-122.5   Min.   : 720  
##  1st Qu.:98029   1st Qu.:47.48   1st Qu.:-122.2   1st Qu.:1958  
##  Median :98052   Median :47.57   Median :-122.1   Median :2430  
##  Mean   :98059   Mean   :47.55   Mean   :-122.1   Mean   :2484  
##  3rd Qu.:98075   3rd Qu.:47.66   3rd Qu.:-122.0   3rd Qu.:2900  
##  Max.   :98199   Max.   :47.78   Max.   :-121.4   Max.   :5790  
##                                                                 
##    sqft_lot15        cluster 
##  Min.   :   651   Min.   :1  
##  1st Qu.:  5100   1st Qu.:1  
##  Median :  7686   Median :1  
##  Mean   : 15869   Mean   :1  
##  3rd Qu.: 11903   3rd Qu.:1  
##  Max.   :871200   Max.   :1  
##                              
## 
## [[2]]
##        id                   date          price            bedrooms   
##  Min.   :1.200e+06   6/23/2014:  29   Min.   :  81000   Min.   :1.00  
##  1st Qu.:2.257e+09   6/25/2014:  29   1st Qu.: 327750   1st Qu.:2.00  
##  Median :4.019e+09   4/28/2015:  27   Median : 431500   Median :3.00  
##  Mean   :4.581e+09   4/2/2015 :  26   Mean   : 468559   Mean   :3.04  
##  3rd Qu.:7.199e+09   4/27/2015:  26   3rd Qu.: 567750   3rd Qu.:4.00  
##  Max.   :9.842e+09   3/4/2015 :  25   Max.   :2300000   Max.   :9.00  
##                      (Other)  :3597                                   
##    bathrooms      sqft_living      sqft_lot          floors     
##  Min.   :0.500   Min.   : 380   Min.   :   520   Min.   :1.000  
##  1st Qu.:1.000   1st Qu.:1180   1st Qu.:  4080   1st Qu.:1.000  
##  Median :1.750   Median :1510   Median :  6000   Median :1.000  
##  Mean   :1.704   Mean   :1613   Mean   :  7672   Mean   :1.307  
##  3rd Qu.:2.000   3rd Qu.:1960   3rd Qu.:  8218   3rd Qu.:1.500  
##  Max.   :4.500   Max.   :5770   Max.   :368517   Max.   :3.500  
##                                                                 
##    waterfront            view          condition         grade       
##  Min.   :0.000000   Min.   :0.0000   Min.   :1.000   Min.   : 4.000  
##  1st Qu.:0.000000   1st Qu.:0.0000   1st Qu.:3.000   1st Qu.: 7.000  
##  Median :0.000000   Median :0.0000   Median :3.000   Median : 7.000  
##  Mean   :0.003724   Mean   :0.1977   Mean   :3.411   Mean   : 7.089  
##  3rd Qu.:0.000000   3rd Qu.:0.0000   3rd Qu.:4.000   3rd Qu.: 8.000  
##  Max.   :1.000000   Max.   :4.0000   Max.   :5.000   Max.   :11.000  
##                                                                      
##    sqft_above   sqft_basement     yr_built     yr_renovated   
##  Min.   : 380   Min.   :   0   Min.   :1900   Min.   :   0.0  
##  1st Qu.:1000   1st Qu.:   0   1st Qu.:1928   1st Qu.:   0.0  
##  Median :1230   Median : 100   Median :1950   Median :   0.0  
##  Mean   :1279   Mean   : 334   Mean   :1951   Mean   : 108.3  
##  3rd Qu.:1480   3rd Qu.: 660   3rd Qu.:1966   3rd Qu.:   0.0  
##  Max.   :4320   Max.   :2610   Max.   :2015   Max.   :2015.0  
##                                                               
##     zipcode           lat             long        sqft_living15 
##  Min.   :98004   Min.   :47.34   Min.   :-122.5   Min.   : 460  
##  1st Qu.:98107   1st Qu.:47.55   1st Qu.:-122.4   1st Qu.:1330  
##  Median :98118   Median :47.66   Median :-122.3   Median :1550  
##  Mean   :98123   Mean   :47.63   Mean   :-122.3   Mean   :1622  
##  3rd Qu.:98144   3rd Qu.:47.70   3rd Qu.:-122.3   3rd Qu.:1842  
##  Max.   :98199   Max.   :47.78   Max.   :-121.4   Max.   :4950  
##                                                                 
##    sqft_lot15        cluster 
##  Min.   :   659   Min.   :2  
##  1st Qu.:  4120   1st Qu.:2  
##  Median :  6000   Median :2  
##  Mean   :  6916   Mean   :2  
##  3rd Qu.:  8100   3rd Qu.:2  
##  Max.   :221442   Max.   :2  
##                              
## 
## [[3]]
##        id                   date          price            bedrooms    
##  Min.   :7.200e+06   9/29/2014:  24   Min.   :  86500   Min.   :1.000  
##  1st Qu.:1.821e+09   12/2/2014:  19   1st Qu.: 250000   1st Qu.:3.000  
##  Median :3.330e+09   6/3/2014 :  19   Median : 320000   Median :3.000  
##  Mean   :4.129e+09   8/26/2014:  19   Mean   : 387355   Mean   :3.301  
##  3rd Qu.:6.752e+09   4/14/2015:  18   3rd Qu.: 472500   3rd Qu.:4.000  
##  Max.   :9.836e+09   6/25/2014:  18   Max.   :3070000   Max.   :8.000  
##                      (Other)  :2464                                    
##    bathrooms     sqft_living      sqft_lot           floors     
##  Min.   :0.75   Min.   : 460   Min.   :   1500   Min.   :1.000  
##  1st Qu.:1.50   1st Qu.:1370   1st Qu.:   7700   1st Qu.:1.000  
##  Median :1.75   Median :1690   Median :   9491   Median :1.000  
##  Mean   :1.85   Mean   :1784   Mean   :  21890   Mean   :1.101  
##  3rd Qu.:2.25   3rd Qu.:2110   3rd Qu.:  13187   3rd Qu.:1.000  
##  Max.   :4.00   Max.   :5461   Max.   :1651359   Max.   :2.500  
##                                                                 
##    waterfront            view          condition         grade       
##  Min.   :0.000000   Min.   :0.0000   Min.   :1.000   Min.   : 3.000  
##  1st Qu.:0.000000   1st Qu.:0.0000   1st Qu.:3.000   1st Qu.: 7.000  
##  Median :0.000000   Median :0.0000   Median :4.000   Median : 7.000  
##  Mean   :0.005812   Mean   :0.1577   Mean   :3.766   Mean   : 7.148  
##  3rd Qu.:0.000000   3rd Qu.:0.0000   3rd Qu.:4.000   3rd Qu.: 8.000  
##  Max.   :1.000000   Max.   :4.0000   Max.   :5.000   Max.   :11.000  
##                                                                      
##    sqft_above   sqft_basement       yr_built     yr_renovated    
##  Min.   : 460   Min.   :   0.0   Min.   :1900   Min.   :   0.00  
##  1st Qu.:1170   1st Qu.:   0.0   1st Qu.:1961   1st Qu.:   0.00  
##  Median :1400   Median :   0.0   Median :1969   Median :   0.00  
##  Mean   :1455   Mean   : 328.3   Mean   :1969   Mean   :  52.53  
##  3rd Qu.:1670   3rd Qu.: 620.0   3rd Qu.:1979   3rd Qu.:   0.00  
##  Max.   :4110   Max.   :2720.0   Max.   :2014   Max.   :2015.00  
##                                                                  
##     zipcode           lat             long        sqft_living15 
##  Min.   :98001   Min.   :47.18   Min.   :-122.5   Min.   : 800  
##  1st Qu.:98011   1st Qu.:47.34   1st Qu.:-122.2   1st Qu.:1470  
##  Median :98032   Median :47.45   Median :-122.2   Median :1750  
##  Mean   :98038   Mean   :47.46   Mean   :-122.2   Mean   :1814  
##  3rd Qu.:98055   3rd Qu.:47.58   3rd Qu.:-122.1   3rd Qu.:2080  
##  Max.   :98199   Max.   :47.78   Max.   :-121.3   Max.   :4010  
##                                                                 
##    sqft_lot15        cluster 
##  Min.   :  1863   Min.   :3  
##  1st Qu.:  7696   1st Qu.:3  
##  Median :  9018   Median :3  
##  Mean   : 17595   Mean   :3  
##  3rd Qu.: 11700   3rd Qu.:3  
##  Max.   :425581   Max.   :3  
## 

Pequeña Interpretación de los 3 Clusters

Cluster 1. Valores en Media

Nº de Observaciones 7.255 Precio medio 498.294
Nº de habitaciones 3.111
Nº de Banyos 1.663 Nº de Plantas 1.22 Metros cuadrado 1.679 Vistas al mar 0.00634
Visitas 0.2571 Condicion Media 3.47 Grado Medio 7.065 Anyo Contruccion 1944

Cluster 2. Valores en Media

Nº de Observaciones 5.687 Precio medio 412.375
Nº de habitaciones 3.345 Nº de Banyos 1.851 Nº de Plantas 1.068 Metros cuadrado 1.808 Vistas al mar 0.006682 Visitas 0.1721 Condicion Media 3.775 Grado Medio 7.19 Anyo Contruccion 1968

Cluster 3. Valores en Media

Nº de Observaciones 8.655 Precio medio 659.559
Nº de habitaciones 3.611 Nº de Banyos 2.669 Nº de Plantas 2.004 Metros cuadrado 2.014 Vistas al mar 0.00912 Visitas 0.256 Condicion Media 3.119
Grado Medio 8.463 Anyo Contruccion 1996

Reducción de dimensionalidad para visualizar los Clústers.

Visualizacion PCA (linear)

El PCA es un algoritmo lienal, no podrá interpretar relaciones complejas polinómicas entre los items del dataset. Vemos que en los dos primeros componentes recogemos el 50,35% de la variabilidad Seleccionando aquellos componentes con autovalor mayor a 1,los Cuatro Primeros, explican el 71,5% de la variabilidad total.

data<- subset(df_mas, select=c("price", "bedrooms","bathrooms","sqft_living","sqft_lot","floors","waterfront",                                        "view","condition","grade","sqft_above","sqft_basement","sqft_living15","sqft_lot15"))
pca<- prcomp(data, scale=TRUE)

summary (pca)
## Importance of components:
##                           PC1    PC2    PC3     PC4     PC5     PC6
## Standard deviation     2.2910 1.3312 1.2904 1.13022 0.91998 0.84123
## Proportion of Variance 0.3749 0.1266 0.1189 0.09124 0.06045 0.05055
## Cumulative Proportion  0.3749 0.5015 0.6204 0.71166 0.77211 0.82266
##                            PC7     PC8     PC9   PC10    PC11    PC12
## Standard deviation     0.76331 0.73840 0.59421 0.5396 0.51350 0.48180
## Proportion of Variance 0.04162 0.03895 0.02522 0.0208 0.01883 0.01658
## Cumulative Proportion  0.86428 0.90322 0.92845 0.9492 0.96808 0.98466
##                           PC13      PC14
## Standard deviation     0.46342 3.114e-15
## Proportion of Variance 0.01534 0.000e+00
## Cumulative Proportion  1.00000 1.000e+00

ScreePlot refleja el porcentanje de variabilidad explicada por cada Componente Principal

fviz_eig(pca)

Interpretación de cada uno de los componentes Principales

A través de los Scores de cada variable dentro del componente Principal podemos libremente afirmar y con fines explicativos;

##PC1

Precio/m2 38% de la variabilidad

##PC2

Espacio Sotano 12% de la variabilidad

##PC3

Espacio Parcela 12% de la varibilidad

##PC4

Vistas al Mar 9% de la variabilidad

pca
## Standard deviations (1, .., p=14):
##  [1] 2.290991e+00 1.331187e+00 1.290405e+00 1.130220e+00 9.199786e-01
##  [6] 8.412345e-01 7.633061e-01 7.384005e-01 5.942140e-01 5.396177e-01
## [11] 5.135018e-01 4.818037e-01 4.634196e-01 3.114364e-15
## 
## Rotation (n x k) = (14 x 14):
##                       PC1          PC2         PC3          PC4
## price         -0.33437666  0.136200434  0.15754206 -0.145214175
## bedrooms      -0.25360376 -0.008951054  0.11765715  0.410796012
## bathrooms     -0.35506324 -0.124097590  0.03566249  0.119182239
## sqft_living   -0.41177963  0.046776713  0.04407581  0.145325770
## sqft_lot      -0.08446621  0.359402810 -0.58842445  0.014814058
## floors        -0.21228019 -0.435090062 -0.13231520 -0.221861499
## waterfront    -0.08355856  0.261792858  0.17963733 -0.606375062
## view          -0.16230955  0.339793141  0.21154546 -0.432938973
## condition      0.05365893  0.337596013  0.18978316  0.258824734
## grade         -0.37464321 -0.104095051 -0.01158452 -0.054282252
## sqft_above    -0.38567597 -0.174379423 -0.13295422 -0.009395016
## sqft_basement -0.12849054  0.419799267  0.33732766  0.315571053
## sqft_living15 -0.35573646  0.015120906 -0.02998692  0.012156600
## sqft_lot15    -0.08763647  0.360051842 -0.59062109  0.022554361
##                       PC5          PC6         PC7         PC8         PC9
## price          0.15722954 -0.233509743  0.01094550 -0.28856640  0.66665655
## bedrooms      -0.14040351  0.583155287 -0.26794213  0.34984149  0.27830913
## bathrooms     -0.10364249  0.227229809  0.30173635 -0.11440406 -0.31697607
## sqft_living   -0.04046040 -0.035116699 -0.06634781 -0.05830088 -0.02172146
## sqft_lot      -0.03635758  0.098473373  0.10263903 -0.02142740  0.23985261
## floors         0.11820546  0.291318368  0.56354052 -0.07281970 -0.01622483
## waterfront    -0.03027099  0.481649908 -0.34086905 -0.36128474 -0.18458396
## view          -0.06165564 -0.075787371  0.30771474  0.71326486  0.02104456
## condition      0.83932746  0.160014900  0.15775222 -0.02227973 -0.14309820
## grade          0.07924099 -0.278153528  0.03337431 -0.12613959 -0.01325816
## sqft_above     0.17903234  0.006421887 -0.23939760  0.09085387  0.04460750
## sqft_basement -0.41548285 -0.083965054  0.30847943 -0.28832445 -0.12740054
## sqft_living15  0.08255872 -0.328847380 -0.33723466  0.15472156 -0.46353475
## sqft_lot15    -0.03050439  0.045129407  0.03807898 -0.03295548 -0.17641636
##                      PC10         PC11         PC12        PC13
## price         -0.17443728  0.157388629  0.053394703  0.39826529
## bedrooms      -0.18542080 -0.093020994 -0.269383107  0.07737021
## bathrooms      0.43220150  0.483388458 -0.046443056  0.39172959
## sqft_living    0.03442709  0.004763123  0.406501288 -0.37614495
## sqft_lot       0.50716484 -0.416607241  0.001812372  0.08312145
## floors        -0.34868534 -0.383294273  0.091052238  0.01160418
## waterfront     0.02619695 -0.067218596 -0.049638751 -0.05622262
## view           0.03901072  0.086261206  0.010059685 -0.05934170
## condition      0.02435741 -0.035056398 -0.025513698 -0.04164100
## grade          0.09608225 -0.031649595 -0.756670313 -0.40260790
## sqft_above     0.11244990  0.133704718  0.397728718 -0.34108781
## sqft_basement -0.13820694 -0.238532477  0.095279259 -0.13819388
## sqft_living15 -0.14516487 -0.396689847  0.015835947  0.47539720
## sqft_lot15    -0.55096060  0.407535546 -0.074863451 -0.03830441
##                        PC14
## price         -1.835619e-15
## bedrooms      -3.136880e-17
## bathrooms     -2.748086e-16
## sqft_living   -6.972144e-01
## sqft_lot       1.065606e-16
## floors        -2.009400e-16
## waterfront     7.721003e-17
## view          -6.776113e-17
## condition     -3.587282e-17
## grade          6.020812e-16
## sqft_above     6.311739e-01
## sqft_basement  3.398699e-01
## sqft_living15  3.077678e-17
## sqft_lot15    -6.984290e-17

Cluster dentro de los PCA’s

Visualizaremos nuestros 3 Clústeres dentro del plano PC1 y PC2, Observamos que tenemos problemas los valores extremos por un lado y por otro la gran partes de los items se nos acumulan muy próximos lo cual no nos facilita la comprensión de los Grupos.

Planteamos nuesvas alternativas al entender que el PCA es insuficiente para interpretar nuestros Clusters

#join pca data y df cluster


pam_fit$clustering <- as.character(pam_fit$clustering)
pca_data <- data.frame(pca$x, cluster=pam_fit$clustering)

ggplot(pca_data, aes(x=PC1, y=PC2, color=cluster)) + geom_point()

Visualizacion t-SNE (non-parametric/ nonlinear)

https://lvdmaaten.github.io/tsne/

https://cran.r-project.org/web/packages/tsne/tsne.pdf

Algoritmo de reducción de dimensionalidad no lineal, encuentra patrones en los datos mediante la identificación de grupos observados basados en la similitud de puntos de datos con múltiples características.

Esta técnica permite utilizar la métrica anteiormente creada, la Distancia de Gower, en nuestro caso se muestran los tres grupos que seleccionamos anteriorenteme con el algortimo PAM.

Asigna los datos multidimensionales creados en la Distancia de Gower anteriormente calculada a un espacio dimensional menor.

Algoritmo t-SNE

Muy útil para el “crowding problem” que implica “la maldición de la dimensión” y básicamente en nuestro caso afecta ya que al aumentar el número de dimensiones la distancia al vecino más próximo aumenta.

Step1

Comienza convirtiendo la distancia, nuestro caso Gower, entre los puntos de datos en medidas de probabilidad condicionales que representan similtud entre los datos. Función Gaussiana, probabilidad alta y probabilidad Baja Hay que prestar atención a las colas que son estrechas y pueden acumular mucha relación de puntos.

Step2

Representando la distribución de Probabilidad. La idea intuitiva es realizar asignaciones de baja dimensión que representen distribuciones de probabilidad similares, aquí nos podemos encontrar con “crowding problem” debido a las “colas cortas” de las distribuciones Gaussianas. Para subsanar este problema y que los puntos tengan una “cola más larga” la t-sne usa uns distribución T-stundent con un grado de libertad. La optimización de esta distribución t-student se realiza mediante una función Gradiente Descendiente que intuitivamenete representa la fuerza y la atracción-repulsión entre dos puntos. Gradiente positivo implica atracción y al contrario. Este “push-and-pull” hace que los puntos se asienten en espacio de baja dimensionalidad.

Step 3

Las t-snes no tienen parámetros y optimizan directamente a través de la función de Coste Gradiente que es No Convexa y puede darnos problemas con los mínimos locales. Existen funciones para corregir este crecimiento de la función Gradiente sobre todo al comienzo del algoritmo. Importante el concepto de vecino estocásticos lo cual implica que no está cerrada la frontera de los puntos que son vecinos contra los puntos que no lo son permitiendo al algotimo tener en cuenta la estructura local como la global.( esto lo realizaremos con el parámetro perplexity)

En la siguiente visualización aparecen los 3 clúster dentro los ejes X e Y El número de dimensiones por defecto es 2

Perplexity es el parámetro que usamos para equilibrar el aspecto local y global de los datos, es en cierta medida determinar de forma supuesta cuanto es el número de vecinos quye tendría cada item ( en nuestro ejemplo casa) por defecto es 20, si lo concentramos mucho o lo dispersamos mucho

perplexity=20

tsne_obj <- Rtsne(gower_dist,perplexity = 20, is_distance = TRUE)
tsne_data <- tsne_obj$Y %>%
  data.frame() %>%
  setNames(c("X", "Y")) %>%
  mutate(cluster = factor(pam_fit$clustering))

ggplot(aes(x = X, y = Y), data = tsne_data) +  geom_point(aes(color = cluster))

#join tsne data y df original

df_join<-cbind(tsne_data,df_mas) 

plot_ly(
  df_join, x = ~X, y = ~Y,
  color = ~floors, size = ~price)
## No trace type specified:
##   Based on info supplied, a 'scatter' trace seems appropriate.
##   Read more about this trace type -> https://plot.ly/r/reference/#scatter
## No scatter mode specifed:
##   Setting the mode to markers
##   Read more about this attribute -> https://plot.ly/r/reference/#scatter-mode
## Warning: `line.width` does not currently support multiple values.

perplexity=50

tsne_obj <- Rtsne(gower_dist,perplexity = 50, is_distance = TRUE)
tsne_data <- tsne_obj$Y %>%
  data.frame() %>%
  setNames(c("X", "Y")) %>%
  mutate(cluster = factor(pam_fit$clustering))

ggplot(aes(x = X, y = Y), data = tsne_data) +
  geom_point(aes(color = cluster))

#join tsne data y df original

df_join<-cbind(tsne_data,df_mas) 

plot_ly(
  df_join, x = ~X, y = ~Y,
  color = ~condition, size = ~sqft_living   )
## No trace type specified:
##   Based on info supplied, a 'scatter' trace seems appropriate.
##   Read more about this trace type -> https://plot.ly/r/reference/#scatter
## No scatter mode specifed:
##   Setting the mode to markers
##   Read more about this attribute -> https://plot.ly/r/reference/#scatter-mode
## Warning: `line.width` does not currently support multiple values.

perplexity=80

Observamos en esta representación que existen grupos mucho más identificables y detallados que en la representación PCA.

tsne_obj <- Rtsne(gower_dist,perplexity = 80, is_distance = TRUE)
tsne_data <- tsne_obj$Y %>%
  data.frame() %>%
  setNames(c("X", "Y")) %>%
  mutate(cluster = factor(pam_fit$clustering))

ggplot(aes(x = X, y = Y), data = tsne_data) +
  geom_point(aes(color = cluster))

#join tsne data y df original

df_join<-cbind(tsne_data,df_mas) 

plot_ly(
  df_join, x = ~X, y = ~Y,
  color = ~yr_built, size = ~sqft_living   )
## No trace type specified:
##   Based on info supplied, a 'scatter' trace seems appropriate.
##   Read more about this trace type -> https://plot.ly/r/reference/#scatter
## No scatter mode specifed:
##   Setting the mode to markers
##   Read more about this attribute -> https://plot.ly/r/reference/#scatter-mode
## Warning: `line.width` does not currently support multiple values.

New CLUSTER After TSNE

El objeto tsne_obj$Y contiene las coordenadas X-Y para cada caso de entrada.

Hierarchical clustering

Agrupaciones de Clusters anidados de forma Aglomerativa, cada observación comienza en su propio grupo, y los pares de grupos se van fusionando a medida que uno se mueve hacia arriba en la jerarquía. El link Criteria que emplearemos será el de Ward que minimizala suma de diferencias entre los Clusters.

cluster_hierarchical=hclust(dist(tsne_obj$Y), method = "ward.D")
plot(cluster_hierarchical, cex = 0.6, hang = -1)

df_join$hclust = factor(cutree(cluster_hierarchical, 3))


ggplot(aes(x = X, y = Y), data = df_join) +
  geom_point(aes(color = hclust))

plot_ly(
  df_join, x = ~X, y = ~Y,
  color = ~yr_built, size = ~sqft_living   )
## No trace type specified:
##   Based on info supplied, a 'scatter' trace seems appropriate.
##   Read more about this trace type -> https://plot.ly/r/reference/#scatter
## No scatter mode specifed:
##   Setting the mode to markers
##   Read more about this attribute -> https://plot.ly/r/reference/#scatter-mode
## Warning: `line.width` does not currently support multiple values.
#frecuencia del número de casas en cada Clúster
ftable(df_join$hclust)
##     1    2    3
##                
##  4288 2993 2719
#descriptivo en cada Clúster


by(df_join, df_join$hclust, summary)
## df_join$hclust: 1
##        X                Y           cluster        id           
##  Min.   :-2.513   Min.   :-23.366   1: 758   Min.   :1.200e+06  
##  1st Qu.: 8.081   1st Qu.: -2.615   2:3370   1st Qu.:2.159e+09  
##  Median :13.145   Median : 10.107   3: 160   Median :4.023e+09  
##  Mean   :13.485   Mean   :  6.618            Mean   :4.562e+09  
##  3rd Qu.:17.766   3rd Qu.: 17.177            3rd Qu.:7.148e+09  
##  Max.   :33.520   Max.   : 27.810            Max.   :9.842e+09  
##                                                                 
##         date          price            bedrooms       bathrooms    
##  6/23/2014:  33   Min.   :  81000   Min.   :1.000   Min.   :0.500  
##  6/25/2014:  33   1st Qu.: 340000   1st Qu.:3.000   1st Qu.:1.000  
##  3/4/2015 :  28   Median : 465000   Median :3.000   Median :1.750  
##  4/27/2015:  28   Mean   : 557091   Mean   :3.175   Mean   :1.924  
##  4/8/2015 :  28   3rd Qu.: 646375   3rd Qu.:4.000   3rd Qu.:2.500  
##  5/20/2014:  28   Max.   :7060000   Max.   :9.000   Max.   :7.500  
##  (Other)  :4110                                                    
##   sqft_living       sqft_lot          floors        waterfront     
##  Min.   :  380   Min.   :   520   Min.   :1.000   Min.   :0.00000  
##  1st Qu.: 1260   1st Qu.:  4000   1st Qu.:1.000   1st Qu.:0.00000  
##  Median : 1650   Median :  5750   Median :1.000   Median :0.00000  
##  Mean   : 1838   Mean   :  7583   Mean   :1.465   Mean   :0.01702  
##  3rd Qu.: 2230   3rd Qu.:  8100   3rd Qu.:2.000   3rd Qu.:0.00000  
##  Max.   :10040   Max.   :505166   Max.   :3.500   Max.   :1.00000  
##                                                                    
##       view          condition         grade          sqft_above  
##  Min.   :0.0000   Min.   :1.000   Min.   : 4.000   Min.   : 380  
##  1st Qu.:0.0000   1st Qu.:3.000   1st Qu.: 7.000   1st Qu.:1040  
##  Median :0.0000   Median :3.000   Median : 7.000   Median :1320  
##  Mean   :0.3403   Mean   :3.434   Mean   : 7.386   Mean   :1473  
##  3rd Qu.:0.0000   3rd Qu.:4.000   3rd Qu.: 8.000   3rd Qu.:1700  
##  Max.   :4.0000   Max.   :5.000   Max.   :13.000   Max.   :7880  
##                                                                  
##  sqft_basement       yr_built     yr_renovated       zipcode     
##  Min.   :   0.0   Min.   :1900   Min.   :   0.0   Min.   :98002  
##  1st Qu.:   0.0   1st Qu.:1929   1st Qu.:   0.0   1st Qu.:98112  
##  Median : 170.0   Median :1951   Median :   0.0   Median :98119  
##  Mean   : 365.1   Mean   :1956   Mean   : 172.3   Mean   :98129  
##  3rd Qu.: 700.0   3rd Qu.:1978   3rd Qu.:   0.0   3rd Qu.:98146  
##  Max.   :3500.0   Max.   :2015   Max.   :2015.0   Max.   :98199  
##                                                                  
##       lat             long        sqft_living15    sqft_lot15     hclust  
##  Min.   :47.20   Min.   :-122.5   Min.   : 460   Min.   :   651   1:4288  
##  1st Qu.:47.54   1st Qu.:-122.4   1st Qu.:1360   1st Qu.:  4000   2:   0  
##  Median :47.64   Median :-122.3   Median :1600   Median :  5760   3:   0  
##  Mean   :47.61   Mean   :-122.3   Mean   :1715   Mean   :  6962           
##  3rd Qu.:47.69   3rd Qu.:-122.3   3rd Qu.:1950   3rd Qu.:  8000           
##  Max.   :47.78   Max.   :-121.8   Max.   :4950   Max.   :222591           
##                                                                           
## -------------------------------------------------------- 
## df_join$hclust: 2
##        X                 Y            cluster        id           
##  Min.   :-25.432   Min.   :-27.5531   1:2726   Min.   :1.000e+06  
##  1st Qu.:-15.371   1st Qu.:-19.9121   2:  41   1st Qu.:2.216e+09  
##  Median : -8.394   Median :-14.8267   3: 226   Median :4.055e+09  
##  Mean   : -8.724   Mean   :-15.2919            Mean   :4.776e+09  
##  3rd Qu.: -2.359   3rd Qu.:-11.0963            3rd Qu.:7.769e+09  
##  Max.   :  7.015   Max.   : -0.8786            Max.   :9.895e+09  
##                                                                   
##          date          price            bedrooms        bathrooms    
##  7/24/2014 :  25   Min.   : 139500   Min.   : 1.000   Min.   :1.000  
##  7/1/2014  :  24   1st Qu.: 380000   1st Qu.: 3.000   1st Qu.:2.500  
##  7/29/2014 :  24   Median : 546200   Median : 4.000   Median :2.500  
##  10/28/2014:  23   Mean   : 626826   Mean   : 3.683   Mean   :2.643  
##  7/8/2014  :  22   3rd Qu.: 760000   3rd Qu.: 4.000   3rd Qu.:2.750  
##  4/21/2015 :  21   Max.   :5570000   Max.   :10.000   Max.   :6.000  
##  (Other)   :2854                                                     
##   sqft_living      sqft_lot           floors        waterfront
##  Min.   : 810   Min.   :    698   Min.   :1.000   Min.   :0   
##  1st Qu.:2040   1st Qu.:   5450   1st Qu.:2.000   1st Qu.:0   
##  Median :2560   Median :   8025   Median :2.000   Median :0   
##  Mean   :2684   Mean   :  20805   Mean   :1.942   Mean   :0   
##  3rd Qu.:3170   3rd Qu.:  12793   3rd Qu.:2.000   3rd Qu.:0   
##  Max.   :9200   Max.   :1024068   Max.   :3.000   Max.   :0   
##                                                               
##       view          condition        grade          sqft_above  
##  Min.   :0.0000   Min.   :2.00   Min.   : 6.000   Min.   : 810  
##  1st Qu.:0.0000   1st Qu.:3.00   1st Qu.: 8.000   1st Qu.:1960  
##  Median :0.0000   Median :3.00   Median : 8.000   Median :2450  
##  Mean   :0.2295   Mean   :3.18   Mean   : 8.465   Mean   :2541  
##  3rd Qu.:0.0000   3rd Qu.:3.00   3rd Qu.: 9.000   3rd Qu.:3010  
##  Max.   :4.0000   Max.   :5.00   Max.   :13.000   Max.   :7320  
##                                                                 
##  sqft_basement       yr_built     yr_renovated          zipcode     
##  Min.   :   0.0   Min.   :1924   Min.   :   0.0000   Min.   :98001  
##  1st Qu.:   0.0   1st Qu.:1989   1st Qu.:   0.0000   1st Qu.:98027  
##  Median :   0.0   Median :1999   Median :   0.0000   Median :98040  
##  Mean   : 142.9   Mean   :1996   Mean   :   0.6726   Mean   :98042  
##  3rd Qu.:   0.0   3rd Qu.:2005   3rd Qu.:   0.0000   3rd Qu.:98059  
##  Max.   :3000.0   Max.   :2015   Max.   :2013.0000   Max.   :98177  
##                                                                     
##       lat             long        sqft_living15    sqft_lot15     hclust  
##  Min.   :47.16   Min.   :-122.5   Min.   : 890   Min.   :   748   1:   0  
##  1st Qu.:47.40   1st Qu.:-122.2   1st Qu.:2000   1st Qu.:  5450   2:2993  
##  Median :47.55   Median :-122.1   Median :2440   Median :  7923   3:   0  
##  Mean   :47.53   Mean   :-122.1   Mean   :2512   Mean   : 16836           
##  3rd Qu.:47.65   3rd Qu.:-122.0   3rd Qu.:2920   3rd Qu.: 11876           
##  Max.   :47.78   Max.   :-121.4   Max.   :5790   Max.   :871200           
##                                                                           
## -------------------------------------------------------- 
## df_join$hclust: 3
##        X                 Y          cluster        id           
##  Min.   :-25.949   Min.   :-6.723   1: 176   Min.   :7.200e+06  
##  1st Qu.:-17.944   1st Qu.: 2.812   2: 348   1st Qu.:1.921e+09  
##  Median :-11.573   Median : 6.566   3:2195   Median :3.577e+09  
##  Mean   :-11.664   Mean   : 6.396            Mean   :4.324e+09  
##  3rd Qu.: -5.548   3rd Qu.:10.028            3rd Qu.:7.199e+09  
##  Max.   :  2.245   Max.   :19.203            Max.   :9.836e+09  
##                                                                 
##         date          price            bedrooms       bathrooms    
##  4/28/2015:  22   Min.   :  85000   Min.   :1.000   Min.   :0.750  
##  4/14/2015:  20   1st Qu.: 259975   1st Qu.:3.000   1st Qu.:1.500  
##  6/25/2014:  20   Median : 350000   Median :3.000   Median :1.750  
##  7/16/2014:  20   Mean   : 402849   Mean   :3.307   Mean   :1.832  
##  7/8/2014 :  20   3rd Qu.: 495000   3rd Qu.:4.000   3rd Qu.:2.250  
##  3/11/2015:  19   Max.   :2850000   Max.   :8.000   Max.   :4.000  
##  (Other)  :2598                                                    
##   sqft_living      sqft_lot           floors        waterfront       
##  Min.   : 460   Min.   :   1500   Min.   :1.000   Min.   :0.0000000  
##  1st Qu.:1340   1st Qu.:   7808   1st Qu.:1.000   1st Qu.:0.0000000  
##  Median :1700   Median :   9648   Median :1.000   Median :0.0000000  
##  Mean   :1786   Mean   :  22382   Mean   :1.035   Mean   :0.0003678  
##  3rd Qu.:2130   3rd Qu.:  13996   3rd Qu.:1.000   3rd Qu.:0.0000000  
##  Max.   :5461   Max.   :1651359   Max.   :2.500   Max.   :1.0000000  
##                                                                      
##       view           condition         grade          sqft_above  
##  Min.   :0.00000   Min.   :1.000   Min.   : 3.000   Min.   : 460  
##  1st Qu.:0.00000   1st Qu.:3.000   1st Qu.: 7.000   1st Qu.:1160  
##  Median :0.00000   Median :4.000   Median : 7.000   Median :1370  
##  Mean   :0.06914   Mean   :3.631   Mean   : 7.201   Mean   :1447  
##  3rd Qu.:0.00000   3rd Qu.:4.000   3rd Qu.: 8.000   3rd Qu.:1650  
##  Max.   :4.00000   Max.   :5.000   Max.   :11.000   Max.   :4040  
##                                                                   
##  sqft_basement     yr_built     yr_renovated         zipcode     
##  Min.   :   0   Min.   :1900   Min.   :   0.000   Min.   :98001  
##  1st Qu.:   0   1st Qu.:1961   1st Qu.:   0.000   1st Qu.:98014  
##  Median :   0   Median :1969   Median :   0.000   Median :98033  
##  Mean   : 339   Mean   :1969   Mean   :   5.833   Mean   :98035  
##  3rd Qu.: 630   3rd Qu.:1979   3rd Qu.:   0.000   3rd Qu.:98055  
##  Max.   :2720   Max.   :2014   Max.   :2009.000   Max.   :98092  
##                                                                  
##       lat             long        sqft_living15    sqft_lot15     hclust  
##  Min.   :47.18   Min.   :-122.5   Min.   : 800   Min.   :  1848   1:   0  
##  1st Qu.:47.36   1st Qu.:-122.2   1st Qu.:1480   1st Qu.:  7820   2:   0  
##  Median :47.49   Median :-122.2   Median :1760   Median :  9450   3:2719  
##  Mean   :47.50   Mean   :-122.2   Mean   :1838   Mean   : 18112           
##  3rd Qu.:47.64   3rd Qu.:-122.1   3rd Qu.:2115   3rd Qu.: 12205           
##  Max.   :47.78   Max.   :-121.3   Max.   :4270   Max.   :425581           
## 
write.csv(df_join,file="cluster.csv")